/* Copyright 2001,2002,2003 NAH6
 * All Rights Reserved
 *
 * Parts Copyright DoD, Parts Copyright Starium
 *
 */
/* -*-C-*-
*******************************************************************************
*
* File:         xsin_table.h
* RCS:          $Id: xsin_table.h,v 1.5 2003/11/22 16:34:28 itsme Exp $
* Description:
* Author:       Eric Blossom
* Created:      Sun Feb 14 18:44:09 1999
* Modified:     Sun Feb 14 18:44:19 1999 (eric) eb@baton.starium.com
* Language:     C
* Package:      N/A
* Status:       Experimental (Do Not Distribute)
*
* (C) Copyright 1999, Starium LLC, all rights reserved.
*
*******************************************************************************
*/

/*
 * 16-bit fixed point sine approximation
 * RMS Error = 0.881844
 */
#define QUADRANT_SIZE   16384
#define LOG2_STEP       3
#define STEP_SIZE       (1 << LOG2_STEP)
#define TABLE_SIZE      (QUADRANT_SIZE / STEP_SIZE)


static fxpt_16 const sine_table16[TABLE_SIZE + 1] = {
       0,
      25,
      50,
      75,
     100,
     125,
     150,
     175,
     201,
     226,
     251,
     276,
     301,
     326,
     351,
     376,
     402,
     427,
     452,
     477,
     502,
     527,
     552,
     578,
     603,
     628,
     653,
     678,
     703,
     728,
     753,
     779,
     804,
     829,
     854,
     879,
     904,
     929,
     954,
     980,
    1005,
    1030,
    1055,
    1080,
    1105,
    1130,
    1155,
    1180,
    1206,
    1231,
    1256,
    1281,
    1306,
    1331,
    1356,
    1381,
    1406,
    1432,
    1457,
    1482,
    1507,
    1532,
    1557,
    1582,
    1607,
    1632,
    1658,
    1683,
    1708,
    1733,
    1758,
    1783,
    1808,
    1833,
    1858,
    1883,
    1908,
    1934,
    1959,
    1984,
    2009,
    2034,
    2059,
    2084,
    2109,
    2134,
    2159,
    2184,
    2209,
    2235,
    2260,
    2285,
    2310,
    2335,
    2360,
    2385,
    2410,
    2435,
    2460,
    2485,
    2510,
    2535,
    2560,
    2585,
    2610,
    2636,
    2661,
    2686,
    2711,
    2736,
    2761,
    2786,
    2811,
    2836,
    2861,
    2886,
    2911,
    2936,
    2961,
    2986,
    3011,
    3036,
    3061,
    3086,
    3111,
    3136,
    3161,
    3186,
    3211,
    3236,
    3261,
    3286,
    3311,
    3336,
    3361,
    3386,
    3411,
    3436,
    3461,
    3486,
    3511,
    3536,
    3561,
    3586,
    3611,
    3636,
    3661,
    3686,
    3711,
    3736,
    3761,
    3786,
    3811,
    3836,
    3861,
    3886,
    3911,
    3936,
    3961,
    3986,
    4011,
    4035,
    4060,
    4085,
    4110,
    4135,
    4160,
    4185,
    4210,
    4235,
    4260,
    4285,
    4310,
    4335,
    4359,
    4384,
    4409,
    4434,
    4459,
    4484,
    4509,
    4534,
    4559,
    4584,
    4608,
    4633,
    4658,
    4683,
    4708,
    4733,
    4758,
    4783,
    4807,
    4832,
    4857,
    4882,
    4907,
    4932,
    4957,
    4981,
    5006,
    5031,
    5056,
    5081,
    5106,
    5130,
    5155,
    5180,
    5205,
    5230,
    5254,
    5279,
    5304,
    5329,
    5354,
    5378,
    5403,
    5428,
    5453,
    5478,
    5502,
    5527,
    5552,
    5577,
    5601,
    5626,
    5651,
    5676,
    5700,
    5725,
    5750,
    5775,
    5799,
    5824,
    5849,
    5874,
    5898,
    5923,
    5948,
    5972,
    5997,
    6022,
    6047,
    6071,
    6096,
    6121,
    6145,
    6170,
    6195,
    6219,
    6244,
    6269,
    6293,
    6318,
    6343,
    6367,
    6392,
    6417,
    6441,
    6466,
    6491,
    6515,
    6540,
    6564,
    6589,
    6614,
    6638,
    6663,
    6688,
    6712,
    6737,
    6761,
    6786,
    6811,
    6835,
    6860,
    6884,
    6909,
    6933,
    6958,
    6982,
    7007,
    7032,
    7056,
    7081,
    7105,
    7130,
    7154,
    7179,
    7203,
    7228,
    7252,
    7277,
    7301,
    7326,
    7350,
    7375,
    7399,
    7424,
    7448,
    7473,
    7497,
    7522,
    7546,
    7571,
    7595,
    7619,
    7644,
    7668,
    7693,
    7717,
    7742,
    7766,
    7790,
    7815,
    7839,
    7864,
    7888,
    7912,
    7937,
    7961,
    7986,
    8010,
    8034,
    8059,
    8083,
    8107,
    8132,
    8156,
    8180,
    8205,
    8229,
    8253,
    8278,
    8302,
    8326,
    8351,
    8375,
    8399,
    8424,
    8448,
    8472,
    8496,
    8521,
    8545,
    8569,
    8593,
    8618,
    8642,
    8666,
    8690,
    8715,
    8739,
    8763,
    8787,
    8812,
    8836,
    8860,
    8884,
    8908,
    8932,
    8957,
    8981,
    9005,
    9029,
    9053,
    9077,
    9102,
    9126,
    9150,
    9174,
    9198,
    9222,
    9246,
    9270,
    9295,
    9319,
    9343,
    9367,
    9391,
    9415,
    9439,
    9463,
    9487,
    9511,
    9535,
    9559,
    9583,
    9607,
    9631,
    9655,
    9679,
    9703,
    9727,
    9751,
    9775,
    9799,
    9823,
    9847,
    9871,
    9895,
    9919,
    9943,
    9967,
    9991,
   10015,
   10039,
   10063,
   10087,
   10111,
   10135,
   10159,
   10182,
   10206,
   10230,
   10254,
   10278,
   10302,
   10326,
   10349,
   10373,
   10397,
   10421,
   10445,
   10469,
   10492,
   10516,
   10540,
   10564,
   10588,
   10611,
   10635,
   10659,
   10683,
   10706,
   10730,
   10754,
   10778,
   10801,
   10825,
   10849,
   10873,
   10896,
   10920,
   10944,
   10967,
   10991,
   11015,
   11038,
   11062,
   11086,
   11109,
   11133,
   11157,
   11180,
   11204,
   11227,
   11251,
   11275,
   11298,
   11322,
   11345,
   11369,
   11393,
   11416,
   11440,
   11463,
   11487,
   11510,
   11534,
   11557,
   11581,
   11604,
   11628,
   11651,
   11675,
   11698,
   11722,
   11745,
   11769,
   11792,
   11816,
   11839,
   11862,
   11886,
   11909,
   11933,
   11956,
   11980,
   12003,
   12026,
   12050,
   12073,
   12096,
   12120,
   12143,
   12166,
   12190,
   12213,
   12236,
   12260,
   12283,
   12306,
   12330,
   12353,
   12376,
   12399,
   12423,
   12446,
   12469,
   12492,
   12516,
   12539,
   12562,
   12585,
   12609,
   12632,
   12655,
   12678,
   12701,
   12724,
   12748,
   12771,
   12794,
   12817,
   12840,
   12863,
   12886,
   12909,
   12933,
   12956,
   12979,
   13002,
   13025,
   13048,
   13071,
   13094,
   13117,
   13140,
   13163,
   13186,
   13209,
   13232,
   13255,
   13278,
   13301,
   13324,
   13347,
   13370,
   13393,
   13416,
   13439,
   13462,
   13485,
   13507,
   13530,
   13553,
   13576,
   13599,
   13622,
   13645,
   13667,
   13690,
   13713,
   13736,
   13759,
   13782,
   13804,
   13827,
   13850,
   13873,
   13895,
   13918,
   13941,
   13964,
   13986,
   14009,
   14032,
   14055,
   14077,
   14100,
   14123,
   14145,
   14168,
   14191,
   14213,
   14236,
   14259,
   14281,
   14304,
   14326,
   14349,
   14372,
   14394,
   14417,
   14439,
   14462,
   14484,
   14507,
   14530,
   14552,
   14575,
   14597,
   14620,
   14642,
   14665,
   14687,
   14709,
   14732,
   14754,
   14777,
   14799,
   14822,
   14844,
   14866,
   14889,
   14911,
   14934,
   14956,
   14978,
   15001,
   15023,
   15045,
   15068,
   15090,
   15112,
   15135,
   15157,
   15179,
   15201,
   15224,
   15246,
   15268,
   15290,
   15313,
   15335,
   15357,
   15379,
   15401,
   15424,
   15446,
   15468,
   15490,
   15512,
   15534,
   15556,
   15579,
   15601,
   15623,
   15645,
   15667,
   15689,
   15711,
   15733,
   15755,
   15777,
   15799,
   15821,
   15843,
   15865,
   15887,
   15909,
   15931,
   15953,
   15975,
   15997,
   16019,
   16041,
   16063,
   16085,
   16107,
   16128,
   16150,
   16172,
   16194,
   16216,
   16238,
   16260,
   16281,
   16303,
   16325,
   16347,
   16368,
   16390,
   16412,
   16434,
   16455,
   16477,
   16499,
   16521,
   16542,
   16564,
   16586,
   16607,
   16629,
   16651,
   16672,
   16694,
   16716,
   16737,
   16759,
   16780,
   16802,
   16824,
   16845,
   16867,
   16888,
   16910,
   16931,
   16953,
   16974,
   16996,
   17017,
   17039,
   17060,
   17082,
   17103,
   17124,
   17146,
   17167,
   17189,
   17210,
   17232,
   17253,
   17274,
   17296,
   17317,
   17338,
   17360,
   17381,
   17402,
   17423,
   17445,
   17466,
   17487,
   17509,
   17530,
   17551,
   17572,
   17593,
   17615,
   17636,
   17657,
   17678,
   17699,
   17720,
   17742,
   17763,
   17784,
   17805,
   17826,
   17847,
   17868,
   17889,
   17910,
   17931,
   17952,
   17973,
   17994,
   18015,
   18036,
   18057,
   18078,
   18099,
   18120,
   18141,
   18162,
   18183,
   18204,
   18225,
   18246,
   18267,
   18287,
   18308,
   18329,
   18350,
   18371,
   18392,
   18412,
   18433,
   18454,
   18475,
   18495,
   18516,
   18537,
   18558,
   18578,
   18599,
   18620,
   18640,
   18661,
   18682,
   18702,
   18723,
   18744,
   18764,
   18785,
   18805,
   18826,
   18846,
   18867,
   18888,
   18908,
   18929,
   18949,
   18970,
   18990,
   19011,
   19031,
   19051,
   19072,
   19092,
   19113,
   19133,
   19154,
   19174,
   19194,
   19215,
   19235,
   19255,
   19276,
   19296,
   19316,
   19337,
   19357,
   19377,
   19397,
   19418,
   19438,
   19458,
   19478,
   19499,
   19519,
   19539,
   19559,
   19579,
   19599,
   19620,
   19640,
   19660,
   19680,
   19700,
   19720,
   19740,
   19760,
   19780,
   19800,
   19820,
   19840,
   19860,
   19880,
   19900,
   19920,
   19940,
   19960,
   19980,
   20000,
   20020,
   20040,
   20060,
   20079,
   20099,
   20119,
   20139,
   20159,
   20179,
   20198,
   20218,
   20238,
   20258,
   20277,
   20297,
   20317,
   20337,
   20356,
   20376,
   20396,
   20415,
   20435,
   20455,
   20474,
   20494,
   20513,
   20533,
   20553,
   20572,
   20592,
   20611,
   20631,
   20650,
   20670,
   20689,
   20709,
   20728,
   20748,
   20767,
   20787,
   20806,
   20825,
   20845,
   20864,
   20884,
   20903,
   20922,
   20942,
   20961,
   20980,
   21000,
   21019,
   21038,
   21057,
   21077,
   21096,
   21115,
   21134,
   21154,
   21173,
   21192,
   21211,
   21230,
   21249,
   21268,
   21288,
   21307,
   21326,
   21345,
   21364,
   21383,
   21402,
   21421,
   21440,
   21459,
   21478,
   21497,
   21516,
   21535,
   21554,
   21573,
   21592,
   21611,
   21629,
   21648,
   21667,
   21686,
   21705,
   21724,
   21743,
   21761,
   21780,
   21799,
   21818,
   21836,
   21855,
   21874,
   21893,
   21911,
   21930,
   21949,
   21967,
   21986,
   22004,
   22023,
   22042,
   22060,
   22079,
   22097,
   22116,
   22135,
   22153,
   22172,
   22190,
   22209,
   22227,
   22245,
   22264,
   22282,
   22301,
   22319,
   22338,
   22356,
   22374,
   22393,
   22411,
   22429,
   22448,
   22466,
   22484,
   22503,
   22521,
   22539,
   22557,
   22575,
   22594,
   22612,
   22630,
   22648,
   22666,
   22685,
   22703,
   22721,
   22739,
   22757,
   22775,
   22793,
   22811,
   22829,
   22847,
   22865,
   22883,
   22901,
   22919,
   22937,
   22955,
   22973,
   22991,
   23009,
   23027,
   23045,
   23062,
   23080,
   23098,
   23116,
   23134,
   23151,
   23169,
   23187,
   23205,
   23223,
   23240,
   23258,
   23276,
   23293,
   23311,
   23329,
   23346,
   23364,
   23382,
   23399,
   23417,
   23434,
   23452,
   23469,
   23487,
   23504,
   23522,
   23539,
   23557,
   23574,
   23592,
   23609,
   23627,
   23644,
   23661,
   23679,
   23696,
   23714,
   23731,
   23748,
   23766,
   23783,
   23800,
   23817,
   23835,
   23852,
   23869,
   23886,
   23903,
   23921,
   23938,
   23955,
   23972,
   23989,
   24006,
   24023,
   24041,
   24058,
   24075,
   24092,
   24109,
   24126,
   24143,
   24160,
   24177,
   24194,
   24211,
   24228,
   24244,
   24261,
   24278,
   24295,
   24312,
   24329,
   24346,
   24362,
   24379,
   24396,
   24413,
   24430,
   24446,
   24463,
   24480,
   24496,
   24513,
   24530,
   24546,
   24563,
   24580,
   24596,
   24613,
   24630,
   24646,
   24663,
   24679,
   24696,
   24712,
   24729,
   24745,
   24762,
   24778,
   24795,
   24811,
   24827,
   24844,
   24860,
   24877,
   24893,
   24909,
   24926,
   24942,
   24958,
   24974,
   24991,
   25007,
   25023,
   25039,
   25056,
   25072,
   25088,
   25104,
   25120,
   25136,
   25152,
   25169,
   25185,
   25201,
   25217,
   25233,
   25249,
   25265,
   25281,
   25297,
   25313,
   25329,
   25345,
   25361,
   25376,
   25392,
   25408,
   25424,
   25440,
   25456,
   25472,
   25487,
   25503,
   25519,
   25535,
   25550,
   25566,
   25582,
   25598,
   25613,
   25629,
   25645,
   25660,
   25676,
   25691,
   25707,
   25723,
   25738,
   25754,
   25769,
   25785,
   25800,
   25816,
   25831,
   25847,
   25862,
   25878,
   25893,
   25908,
   25924,
   25939,
   25954,
   25970,
   25985,
   26000,
   26016,
   26031,
   26046,
   26061,
   26077,
   26092,
   26107,
   26122,
   26137,
   26153,
   26168,
   26183,
   26198,
   26213,
   26228,
   26243,
   26258,
   26273,
   26288,
   26303,
   26318,
   26333,
   26348,
   26363,
   26378,
   26393,
   26408,
   26423,
   26437,
   26452,
   26467,
   26482,
   26497,
   26512,
   26526,
   26541,
   26556,
   26570,
   26585,
   26600,
   26615,
   26629,
   26644,
   26658,
   26673,
   26688,
   26702,
   26717,
   26731,
   26746,
   26760,
   26775,
   26789,
   26804,
   26818,
   26833,
   26847,
   26861,
   26876,
   26890,
   26905,
   26919,
   26933,
   26948,
   26962,
   26976,
   26990,
   27005,
   27019,
   27033,
   27047,
   27061,
   27076,
   27090,
   27104,
   27118,
   27132,
   27146,
   27160,
   27174,
   27188,
   27202,
   27216,
   27230,
   27244,
   27258,
   27272,
   27286,
   27300,
   27314,
   27328,
   27342,
   27355,
   27369,
   27383,
   27397,
   27411,
   27424,
   27438,
   27452,
   27466,
   27479,
   27493,
   27507,
   27520,
   27534,
   27548,
   27561,
   27575,
   27588,
   27602,
   27615,
   27629,
   27642,
   27656,
   27669,
   27683,
   27696,
   27710,
   27723,
   27736,
   27750,
   27763,
   27777,
   27790,
   27803,
   27816,
   27830,
   27843,
   27856,
   27869,
   27883,
   27896,
   27909,
   27922,
   27935,
   27948,
   27962,
   27975,
   27988,
   28001,
   28014,
   28027,
   28040,
   28053,
   28066,
   28079,
   28092,
   28105,
   28118,
   28131,
   28143,
   28156,
   28169,
   28182,
   28195,
   28208,
   28220,
   28233,
   28246,
   28259,
   28271,
   28284,
   28297,
   28309,
   28322,
   28335,
   28347,
   28360,
   28372,
   28385,
   28397,
   28410,
   28423,
   28435,
   28447,
   28460,
   28472,
   28485,
   28497,
   28510,
   28522,
   28534,
   28547,
   28559,
   28571,
   28584,
   28596,
   28608,
   28620,
   28633,
   28645,
   28657,
   28669,
   28681,
   28694,
   28706,
   28718,
   28730,
   28742,
   28754,
   28766,
   28778,
   28790,
   28802,
   28814,
   28826,
   28838,
   28850,
   28862,
   28874,
   28886,
   28897,
   28909,
   28921,
   28933,
   28945,
   28956,
   28968,
   28980,
   28992,
   29003,
   29015,
   29027,
   29038,
   29050,
   29062,
   29073,
   29085,
   29096,
   29108,
   29119,
   29131,
   29142,
   29154,
   29165,
   29177,
   29188,
   29200,
   29211,
   29222,
   29234,
   29245,
   29256,
   29268,
   29279,
   29290,
   29302,
   29313,
   29324,
   29335,
   29346,
   29358,
   29369,
   29380,
   29391,
   29402,
   29413,
   29424,
   29435,
   29446,
   29457,
   29468,
   29479,
   29490,
   29501,
   29512,
   29523,
   29534,
   29545,
   29556,
   29567,
   29577,
   29588,
   29599,
   29610,
   29621,
   29631,
   29642,
   29653,
   29663,
   29674,
   29685,
   29695,
   29706,
   29717,
   29727,
   29738,
   29748,
   29759,
   29769,
   29780,
   29790,
   29801,
   29811,
   29822,
   29832,
   29842,
   29853,
   29863,
   29873,
   29884,
   29894,
   29904,
   29915,
   29925,
   29935,
   29945,
   29955,
   29966,
   29976,
   29986,
   29996,
   30006,
   30016,
   30026,
   30036,
   30046,
   30056,
   30066,
   30076,
   30086,
   30096,
   30106,
   30116,
   30126,
   30136,
   30146,
   30156,
   30165,
   30175,
   30185,
   30195,
   30205,
   30214,
   30224,
   30234,
   30243,
   30253,
   30263,
   30272,
   30282,
   30291,
   30301,
   30311,
   30320,
   30330,
   30339,
   30349,
   30358,
   30368,
   30377,
   30386,
   30396,
   30405,
   30415,
   30424,
   30433,
   30442,
   30452,
   30461,
   30470,
   30480,
   30489,
   30498,
   30507,
   30516,
   30525,
   30535,
   30544,
   30553,
   30562,
   30571,
   30580,
   30589,
   30598,
   30607,
   30616,
   30625,
   30634,
   30643,
   30652,
   30660,
   30669,
   30678,
   30687,
   30696,
   30705,
   30713,
   30722,
   30731,
   30739,
   30748,
   30757,
   30766,
   30774,
   30783,
   30791,
   30800,
   30809,
   30817,
   30826,
   30834,
   30843,
   30851,
   30860,
   30868,
   30876,
   30885,
   30893,
   30902,
   30910,
   30918,
   30927,
   30935,
   30943,
   30951,
   30960,
   30968,
   30976,
   30984,
   30992,
   31001,
   31009,
   31017,
   31025,
   31033,
   31041,
   31049,
   31057,
   31065,
   31073,
   31081,
   31089,
   31097,
   31105,
   31113,
   31121,
   31128,
   31136,
   31144,
   31152,
   31160,
   31167,
   31175,
   31183,
   31191,
   31198,
   31206,
   31214,
   31221,
   31229,
   31236,
   31244,
   31252,
   31259,
   31267,
   31274,
   31282,
   31289,
   31297,
   31304,
   31311,
   31319,
   31326,
   31334,
   31341,
   31348,
   31356,
   31363,
   31370,
   31377,
   31385,
   31392,
   31399,
   31406,
   31413,
   31420,
   31428,
   31435,
   31442,
   31449,
   31456,
   31463,
   31470,
   31477,
   31484,
   31491,
   31498,
   31505,
   31512,
   31518,
   31525,
   31532,
   31539,
   31546,
   31553,
   31559,
   31566,
   31573,
   31580,
   31586,
   31593,
   31600,
   31606,
   31613,
   31619,
   31626,
   31633,
   31639,
   31646,
   31652,
   31659,
   31665,
   31672,
   31678,
   31684,
   31691,
   31697,
   31704,
   31710,
   31716,
   31723,
   31729,
   31735,
   31741,
   31748,
   31754,
   31760,
   31766,
   31772,
   31778,
   31785,
   31791,
   31797,
   31803,
   31809,
   31815,
   31821,
   31827,
   31833,
   31839,
   31845,
   31851,
   31856,
   31862,
   31868,
   31874,
   31880,
   31886,
   31891,
   31897,
   31903,
   31909,
   31914,
   31920,
   31926,
   31931,
   31937,
   31943,
   31948,
   31954,
   31959,
   31965,
   31970,
   31976,
   31981,
   31987,
   31992,
   31998,
   32003,
   32008,
   32014,
   32019,
   32024,
   32030,
   32035,
   32040,
   32046,
   32051,
   32056,
   32061,
   32066,
   32072,
   32077,
   32082,
   32087,
   32092,
   32097,
   32102,
   32107,
   32112,
   32117,
   32122,
   32127,
   32132,
   32137,
   32142,
   32147,
   32152,
   32156,
   32161,
   32166,
   32171,
   32176,
   32180,
   32185,
   32190,
   32194,
   32199,
   32204,
   32208,
   32213,
   32218,
   32222,
   32227,
   32231,
   32236,
   32240,
   32245,
   32249,
   32254,
   32258,
   32262,
   32267,
   32271,
   32275,
   32280,
   32284,
   32288,
   32293,
   32297,
   32301,
   32305,
   32310,
   32314,
   32318,
   32322,
   32326,
   32330,
   32334,
   32338,
   32342,
   32346,
   32350,
   32354,
   32358,
   32362,
   32366,
   32370,
   32374,
   32378,
   32382,
   32386,
   32389,
   32393,
   32397,
   32401,
   32404,
   32408,
   32412,
   32416,
   32419,
   32423,
   32426,
   32430,
   32434,
   32437,
   32441,
   32444,
   32448,
   32451,
   32455,
   32458,
   32462,
   32465,
   32468,
   32472,
   32475,
   32478,
   32482,
   32485,
   32488,
   32492,
   32495,
   32498,
   32501,
   32504,
   32508,
   32511,
   32514,
   32517,
   32520,
   32523,
   32526,
   32529,
   32532,
   32535,
   32538,
   32541,
   32544,
   32547,
   32550,
   32553,
   32556,
   32558,
   32561,
   32564,
   32567,
   32570,
   32572,
   32575,
   32578,
   32580,
   32583,
   32586,
   32588,
   32591,
   32594,
   32596,
   32599,
   32601,
   32604,
   32606,
   32609,
   32611,
   32614,
   32616,
   32618,
   32621,
   32623,
   32625,
   32628,
   32630,
   32632,
   32635,
   32637,
   32639,
   32641,
   32644,
   32646,
   32648,
   32650,
   32652,
   32654,
   32656,
   32658,
   32660,
   32662,
   32664,
   32666,
   32668,
   32670,
   32672,
   32674,
   32676,
   32678,
   32680,
   32681,
   32683,
   32685,
   32687,
   32688,
   32690,
   32692,
   32694,
   32695,
   32697,
   32699,
   32700,
   32702,
   32703,
   32705,
   32706,
   32708,
   32709,
   32711,
   32712,
   32714,
   32715,
   32717,
   32718,
   32719,
   32721,
   32722,
   32723,
   32725,
   32726,
   32727,
   32728,
   32729,
   32731,
   32732,
   32733,
   32734,
   32735,
   32736,
   32737,
   32738,
   32739,
   32740,
   32741,
   32742,
   32743,
   32744,
   32745,
   32746,
   32747,
   32748,
   32749,
   32750,
   32750,
   32751,
   32752,
   32753,
   32753,
   32754,
   32755,
   32755,
   32756,
   32757,
   32757,
   32758,
   32758,
   32759,
   32759,
   32760,
   32760,
   32761,
   32761,
   32762,
   32762,
   32763,
   32763,
   32763,
   32764,
   32764,
   32764,
   32765,
   32765,
   32765,
   32765,
   32766,
   32766,
   32766,
   32766,
   32766,
   32766,
   32766,
   32766,
   32766,
   32766,
   32767
};

static fxpt_32 const sine_table32[TABLE_SIZE + 1] = {
               0,
         1647099,
         3294197,
         4941293,
         6588386,
         8235476,
         9882561,
        11529639,
        13176711,
        14823776,
        16470831,
        18117877,
        19764912,
        21411936,
        23058947,
        24705944,
        26352927,
        27999895,
        29646846,
        31293779,
        32940694,
        34587590,
        36234465,
        37881319,
        39528151,
        41174959,
        42821744,
        44468503,
        46115236,
        47761942,
        49408619,
        51055268,
        52701886,
        54348474,
        55995030,
        57641552,
        59288041,
        60934495,
        62580913,
        64227294,
        65873638,
        67519942,
        69166207,
        70812432,
        72458614,
        74104754,
        75750851,
        77396903,
        79042909,
        80688869,
        82334781,
        83980645,
        85626459,
        87272224,
        88917936,
        90563597,
        92209204,
        93854757,
        95500255,
        97145696,
        98791081,
       100436407,
       102081674,
       103726882,
       105372028,
       107017112,
       108662133,
       110307090,
       111951983,
       113596809,
       115241569,
       116886261,
       118530884,
       120175438,
       121819920,
       123464331,
       125108670,
       126752935,
       128397125,
       130041240,
       131685278,
       133329239,
       134973121,
       136616924,
       138260647,
       139904288,
       141547847,
       143191322,
       144834714,
       146478020,
       148121240,
       149764373,
       151407418,
       153050374,
       154693239,
       156336014,
       157978697,
       159621287,
       161263783,
       162906184,
       164548489,
       166190697,
       167832808,
       169474820,
       171116732,
       172758544,
       174400253,
       176041861,
       177683365,
       179324764,
       180966058,
       182607245,
       184248325,
       185889296,
       187530158,
       189170910,
       190811551,
       192452079,
       194092494,
       195732795,
       197372981,
       199013050,
       200653003,
       202292837,
       203932553,
       205572148,
       207211623,
       208850976,
       210490205,
       212129312,
       213768293,
       215407148,
       217045877,
       218684478,
       220322950,
       221961293,
       223599506,
       225237586,
       226875534,
       228513349,
       230151030,
       231788574,
       233425983,
       235063254,
       236700387,
       238337381,
       239974234,
       241610947,
       243247517,
       244883944,
       246520227,
       248156365,
       249792357,
       251428202,
       253063900,
       254699448,
       256334846,
       257970094,
       259605190,
       261240133,
       262874923,
       264509558,
       266144037,
       267778360,
       269412525,
       271046532,
       272680379,
       274314066,
       275947591,
       277580954,
       279214154,
       280847190,
       282480060,
       284112764,
       285745301,
       287377670,
       289009870,
       290641900,
       292273759,
       293905446,
       295536960,
       297168300,
       298799466,
       300430455,
       302061268,
       303691903,
       305322360,
       306952637,
       308582733,
       310212648,
       311842381,
       313471929,
       315101294,
       316730473,
       318359466,
       319988271,
       321616889,
       323245317,
       324873555,
       326501601,
       328129456,
       329757118,
       331384586,
       333011858,
       334638935,
       336265815,
       337892497,
       339518981,
       341145265,
       342771348,
       344397229,
       346022908,
       347648383,
       349273654,
       350898719,
       352523578,
       354148229,
       355772672,
       357396906,
       359020929,
       360644742,
       362268342,
       363891729,
       365514902,
       367137860,
       368760602,
       370383127,
       372005434,
       373627522,
       375249391,
       376871039,
       378492465,
       380113668,
       381734648,
       383355403,
       384975933,
       386596236,
       388216312,
       389836160,
       391455778,
       393075166,
       394694322,
       396313247,
       397931938,
       399550395,
       401168617,
       402786603,
       404404353,
       406021864,
       407639136,
       409256169,
       410872961,
       412489511,
       414105819,
       415721883,
       417337702,
       418953276,
       420568603,
       422183683,
       423798515,
       425413097,
       427027429,
       428641510,
       430255339,
       431868914,
       433482236,
       435095302,
       436708113,
       438320666,
       439932962,
       441544999,
       443156776,
       444768293,
       446379548,
       447990540,
       449601269,
       451211733,
       452821932,
       454431865,
       456041530,
       457650927,
       459260054,
       460868912,
       462477498,
       464085812,
       465693853,
       467301621,
       468909113,
       470516330,
       472123270,
       473729932,
       475336315,
       476942419,
       478548242,
       480153783,
       481759043,
       483364018,
       484968710,
       486573116,
       488177236,
       489781068,
       491384613,
       492987869,
       494590834,
       496193509,
       497795891,
       499397981,
       500999777,
       502601278,
       504202484,
       505803393,
       507404004,
       509004317,
       510604331,
       512204044,
       513803456,
       515402565,
       517001372,
       518599874,
       520198071,
       521795962,
       523393547,
       524990823,
       526587790,
       528184448,
       529780795,
       531376830,
       532972553,
       534567962,
       536163057,
       537757836,
       539352299,
       540946445,
       542540272,
       544133780,
       545726969,
       547319836,
       548912381,
       550504603,
       552096501,
       553688075,
       555279323,
       556870244,
       558460838,
       560051103,
       561641039,
       563230644,
       564819918,
       566408859,
       567997468,
       569585742,
       571173681,
       572761285,
       574348551,
       575935479,
       577522069,
       579108319,
       580694228,
       582279796,
       583865021,
       585449902,
       587034439,
       588618631,
       590202477,
       591785975,
       593369125,
       594951926,
       596534378,
       598116478,
       599698226,
       601279622,
       602860664,
       604441351,
       606021683,
       607601658,
       609181275,
       610760535,
       612339435,
       613917975,
       615496153,
       617073970,
       618651423,
       620228513,
       621805238,
       623381597,
       624957589,
       626533214,
       628108470,
       629683356,
       631257872,
       632832017,
       634405790,
       635979189,
       637552214,
       639124864,
       640697138,
       642269036,
       643840555,
       645411696,
       646982457,
       648552837,
       650122836,
       651692452,
       653261685,
       654830534,
       656398997,
       657967075,
       659534765,
       661102067,
       662668981,
       664235504,
       665801637,
       667367378,
       668932727,
       670497682,
       672062242,
       673626407,
       675190176,
       676753548,
       678316522,
       679879096,
       681441271,
       683003045,
       684564417,
       686125386,
       687685951,
       689246113,
       690805868,
       692365217,
       693924159,
       695482693,
       697040818,
       698598532,
       700155836,
       701712727,
       703269206,
       704825271,
       706380922,
       707936157,
       709490975,
       711045377,
       712599359,
       714152923,
       715706067,
       717258789,
       718811090,
       720362967,
       721914421,
       723465451,
       725016054,
       726566231,
       728115981,
       729665302,
       731214195,
       732762657,
       734310687,
       735858286,
       737405452,
       738952185,
       740498482,
       742044344,
       743589770,
       745134758,
       746679307,
       748223418,
       749767088,
       751310317,
       752853104,
       754395449,
       755937349,
       757478805,
       759019815,
       760560379,
       762100495,
       763640163,
       765179382,
       766718150,
       768256468,
       769794333,
       771331746,
       772868705,
       774405209,
       775941258,
       777476851,
       779011985,
       780546662,
       782080880,
       783614637,
       785147933,
       786680768,
       788213140,
       789745048,
       791276491,
       792807469,
       794337981,
       795868025,
       797397601,
       798926708,
       800455345,
       801983512,
       803511206,
       805038428,
       806565176,
       808091449,
       809617248,
       811142570,
       812667415,
       814191781,
       815715669,
       817239077,
       818762004,
       820284450,
       821806412,
       823327892,
       824848887,
       826369397,
       827889421,
       829408958,
       830928006,
       832446566,
       833964637,
       835482216,
       836999305,
       838515900,
       840032003,
       841547611,
       843062725,
       844577342,
       846091463,
       847605085,
       849118210,
       850630834,
       852142958,
       853654581,
       855165702,
       856676320,
       858186434,
       859696043,
       861205146,
       862713742,
       864221831,
       865729412,
       867236483,
       868743044,
       870249094,
       871754633,
       873259658,
       874764170,
       876268167,
       877771648,
       879274613,
       880777061,
       882278991,
       883780402,
       885281292,
       886781662,
       888281511,
       889780837,
       891279639,
       892777917,
       894275670,
       895772897,
       897269597,
       898765769,
       900261412,
       901756525,
       903251109,
       904745160,
       906238680,
       907731667,
       909224119,
       910716037,
       912207418,
       913698264,
       915188571,
       916678341,
       918167571,
       919656261,
       921144410,
       922632017,
       924119081,
       925605602,
       927091578,
       928577009,
       930061893,
       931546230,
       933030020,
       934513260,
       935995951,
       937478091,
       938959680,
       940440716,
       941921199,
       943401128,
       944880502,
       946359320,
       947837581,
       949315285,
       950792430,
       952269016,
       953745042,
       955220507,
       956695410,
       958169750,
       959643526,
       961116738,
       962589384,
       964061464,
       965532977,
       967003922,
       968474299,
       969944105,
       971413341,
       972882005,
       974350097,
       975817616,
       977284561,
       978750931,
       980216725,
       981681942,
       983146582,
       984610644,
       986074126,
       987537029,
       988999350,
       990461090,
       991922247,
       993382820,
       994842809,
       996302213,
       997761030,
       999219261,
      1000676904,
      1002133958,
      1003590423,
      1005046297,
      1006501580,
      1007956271,
      1009410369,
      1010863874,
      1012316783,
      1013769097,
      1015220815,
      1016671935,
      1018122458,
      1019572381,
      1021021705,
      1022470427,
      1023918549,
      1025366068,
      1026812984,
      1028259296,
      1029705003,
      1031150104,
      1032594599,
      1034038486,
      1035481765,
      1036924435,
      1038366494,
      1039807943,
      1041248781,
      1042689005,
      1044128616,
      1045567614,
      1047005996,
      1048443762,
      1049880911,
      1051317442,
      1052753356,
      1054188650,
      1055623323,
      1057057376,
      1058490807,
      1059923615,
      1061355800,
      1062787360,
      1064218295,
      1065648604,
      1067078287,
      1068507341,
      1069935767,
      1071363563,
      1072790729,
      1074217265,
      1075643168,
      1077068438,
      1078493075,
      1079917077,
      1081340444,
      1082763175,
      1084185269,
      1085606725,
      1087027543,
      1088447721,
      1089867258,
      1091286155,
      1092704410,
      1094122022,
      1095538990,
      1096955313,
      1098370992,
      1099786024,
      1101200409,
      1102614147,
      1104027236,
      1105439675,
      1106851464,
      1108262602,
      1109673088,
      1111082921,
      1112492100,
      1113900626,
      1115308495,
      1116715709,
      1118122266,
      1119528165,
      1120933405,
      1122337986,
      1123741907,
      1125145167,
      1126547764,
      1127949700,
      1129350971,
      1130751578,
      1132151520,
      1133550796,
      1134949405,
      1136347347,
      1137744620,
      1139141223,
      1140537157,
      1141932419,
      1143327010,
      1144720928,
      1146114173,
      1147506744,
      1148898639,
      1150289859,
      1151680402,
      1153070268,
      1154459455,
      1155847963,
      1157235791,
      1158622938,
      1160009404,
      1161395187,
      1162780287,
      1164164703,
      1165548434,
      1166931480,
      1168313839,
      1169695511,
      1171076494,
      1172456789,
      1173836394,
      1175215309,
      1176593532,
      1177971063,
      1179347901,
      1180724045,
      1182099495,
      1183474249,
      1184848307,
      1186221668,
      1187594331,
      1188966296,
      1190337561,
      1191708126,
      1193077990,
      1194447152,
      1195815611,
      1197183367,
      1198550418,
      1199916765,
      1201282406,
      1202647339,
      1204011566,
      1205375084,
      1206737893,
      1208099992,
      1209461381,
      1210822058,
      1212182022,
      1213541274,
      1214899812,
      1216257635,
      1217614742,
      1218971133,
      1220326808,
      1221681764,
      1223036001,
      1224389520,
      1225742317,
      1227094394,
      1228445749,
      1229796381,
      1231146290,
      1232495474,
      1233843934,
      1235191667,
      1236538674,
      1237884954,
      1239230505,
      1240575328,
      1241919420,
      1243262782,
      1244605413,
      1245947311,
      1247288476,
      1248628908,
      1249968605,
      1251307567,
      1252645793,
      1253983282,
      1255320033,
      1256656045,
      1257991319,
      1259325852,
      1260659645,
      1261992696,
      1263325004,
      1264656569,
      1265987391,
      1267317467,
      1268646799,
      1269975383,
      1271303221,
      1272630311,
      1273956652,
      1275282244,
      1276607085,
      1277931176,
      1279254514,
      1280577101,
      1281898933,
      1283220012,
      1284540336,
      1285859904,
      1287178716,
      1288496771,
      1289814067,
      1291130605,
      1292446383,
      1293761401,
      1295075658,
      1296389153,
      1297701885,
      1299013854,
      1300325059,
      1301635499,
      1302945173,
      1304254081,
      1305562221,
      1306869593,
      1308176197,
      1309482031,
      1310787094,
      1312091387,
      1313394908,
      1314697656,
      1315999630,
      1317300831,
      1318601256,
      1319900906,
      1321199779,
      1322497876,
      1323795194,
      1325091733,
      1326387493,
      1327682472,
      1328976671,
      1330270088,
      1331562722,
      1332854573,
      1334145640,
      1335435922,
      1336725418,
      1338014128,
      1339302051,
      1340589186,
      1341875532,
      1343161089,
      1344445856,
      1345729832,
      1347013016,
      1348295408,
      1349577006,
      1350857811,
      1352137821,
      1353417036,
      1354695454,
      1355973076,
      1357249900,
      1358525925,
      1359801151,
      1361075577,
      1362349203,
      1363622027,
      1364894049,
      1366165268,
      1367435684,
      1368705294,
      1369974100,
      1371242100,
      1372509293,
      1373775679,
      1375041257,
      1376306025,
      1377569984,
      1378833133,
      1380095471,
      1381356996,
      1382617709,
      1383877609,
      1385136695,
      1386394965,
      1387652420,
      1388909059,
      1390164881,
      1391419885,
      1392674071,
      1393927437,
      1395179983,
      1396431708,
      1397682612,
      1398932694,
      1400181953,
      1401430388,
      1402677998,
      1403924784,
      1405170743,
      1406415876,
      1407660182,
      1408903660,
      1410146308,
      1411388127,
      1412629116,
      1413869274,
      1415108600,
      1416347094,
      1417584754,
      1418821581,
      1420057573,
      1421292729,
      1422527049,
      1423760533,
      1424993179,
      1426224987,
      1427455955,
      1428686084,
      1429915373,
      1431143820,
      1432371425,
      1433598188,
      1434824107,
      1436049183,
      1437273413,
      1438496798,
      1439719337,
      1440941029,
      1442161873,
      1443381869,
      1444601016,
      1445819312,
      1447036759,
      1448253354,
      1449469097,
      1450683987,
      1451898024,
      1453111207,
      1454323535,
      1455535008,
      1456745624,
      1457955383,
      1459164285,
      1460372328,
      1461579512,
      1462785837,
      1463991301,
      1465195903,
      1466399644,
      1467602522,
      1468804536,
      1470005687,
      1471205973,
      1472405393,
      1473603947,
      1474801635,
      1475998454,
      1477194406,
      1478389488,
      1479583701,
      1480777043,
      1481969514,
      1483161114,
      1484351841,
      1485541694,
      1486730674,
      1487918779,
      1489106009,
      1490292363,
      1491477840,
      1492662440,
      1493846162,
      1495029005,
      1496210968,
      1497392051,
      1498572254,
      1499751575,
      1500930013,
      1502107569,
      1503284241,
      1504460028,
      1505634931,
      1506808947,
      1507982078,
      1509154321,
      1510325677,
      1511496144,
      1512665721,
      1513834409,
      1515002207,
      1516169113,
      1517335127,
      1518500249,
      1519664477,
      1520827811,
      1521990251,
      1523151796,
      1524312444,
      1525472195,
      1526631050,
      1527789006,
      1528946063,
      1530102221,
      1531257479,
      1532411836,
      1533565291,
      1534717845,
      1535869495,
      1537020242,
      1538170085,
      1539319023,
      1540467056,
      1541614182,
      1542760401,
      1543905713,
      1545050117,
      1546193611,
      1547336196,
      1548477871,
      1549618635,
      1550758487,
      1551897427,
      1553035454,
      1554172567,
      1555308767,
      1556444051,
      1557578419,
      1558711872,
      1559844407,
      1560976025,
      1562106724,
      1563236505,
      1564365365,
      1565493306,
      1566620326,
      1567746424,
      1568871600,
      1569995852,
      1571119182,
      1572241587,
      1573363067,
      1574483621,
      1575603250,
      1576721951,
      1577839725,
      1578956571,
      1580072488,
      1581187475,
      1582301532,
      1583414658,
      1584526853,
      1585638116,
      1586748446,
      1587857842,
      1588966305,
      1590073832,
      1591180424,
      1592286081,
      1593390800,
      1594494582,
      1595597426,
      1596699332,
      1597800298,
      1598900324,
      1599999410,
      1601097554,
      1602194757,
      1603291017,
      1604386334,
      1605480706,
      1606574135,
      1607666618,
      1608758156,
      1609848747,
      1610938392,
      1612027088,
      1613114836,
      1614201636,
      1615287485,
      1616372385,
      1617456334,
      1618539331,
      1619621376,
      1620702468,
      1621782607,
      1622861791,
      1623940021,
      1625017296,
      1626093615,
      1627168977,
      1628243382,
      1629316829,
      1630389317,
      1631460847,
      1632531417,
      1633601026,
      1634669674,
      1635737361,
      1636804086,
      1637869847,
      1638934645,
      1639998479,
      1641061348,
      1642123252,
      1643184190,
      1644244161,
      1645303165,
      1646361200,
      1647418268,
      1648474366,
      1649529495,
      1650583653,
      1651636840,
      1652689055,
      1653740299,
      1654790569,
      1655839866,
      1656888189,
      1657935537,
      1658981910,
      1660027307,
      1661071727,
      1662115171,
      1663157636,
      1664199123,
      1665239631,
      1666279160,
      1667317708,
      1668355275,
      1669391861,
      1670427465,
      1671462086,
      1672495724,
      1673528378,
      1674560047,
      1675590732,
      1676620430,
      1677649143,
      1678676868,
      1679703606,
      1680729356,
      1681754117,
      1682777889,
      1683800671,
      1684822462,
      1685843262,
      1686863071,
      1687881887,
      1688899710,
      1689916539,
      1690932375,
      1691947216,
      1692961061,
      1693973910,
      1694985763,
      1695996619,
      1697006477,
      1698015337,
      1699023198,
      1700030060,
      1701035921,
      1702040782,
      1703044641,
      1704047499,
      1705049354,
      1706050206,
      1707050054,
      1708048898,
      1709046738,
      1710043572,
      1711039400,
      1712034221,
      1713028036,
      1714020842,
      1715012641,
      1716003430,
      1716993210,
      1717981980,
      1718969739,
      1719956487,
      1720942223,
      1721926947,
      1722910658,
      1723893355,
      1724875039,
      1725855707,
      1726835360,
      1727813998,
      1728791618,
      1729768222,
      1730743809,
      1731718377,
      1732691926,
      1733664457,
      1734635967,
      1735606457,
      1736575926,
      1737544373,
      1738511798,
      1739478200,
      1740443579,
      1741407935,
      1742371265,
      1743333571,
      1744294851,
      1745255106,
      1746214333,
      1747172533,
      1748129706,
      1749085850,
      1750040965,
      1750995050,
      1751948106,
      1752900131,
      1753851124,
      1754801086,
      1755750016,
      1756697913,
      1757644776,
      1758590605,
      1759535400,
      1760479160,
      1761421884,
      1762363572,
      1763304223,
      1764243837,
      1765182413,
      1766119950,
      1767056449,
      1767991908,
      1768926327,
      1769859705,
      1770792043,
      1771723338,
      1772653592,
      1773582802,
      1774510969,
      1775438092,
      1776364171,
      1777289205,
      1778213193,
      1779136135,
      1780058031,
      1780978879,
      1781898680,
      1782817432,
      1783735136,
      1784651790,
      1785567395,
      1786481949,
      1787395452,
      1788307904,
      1789219303,
      1790129650,
      1791038944,
      1791947185,
      1792854371,
      1793760503,
      1794665579,
      1795569599,
      1796472564,
      1797374471,
      1798275321,
      1799175113,
      1800073847,
      1800971522,
      1801868137,
      1802763693,
      1803658188,
      1804551622,
      1805443994,
      1806335304,
      1807225552,
      1808114736,
      1809002857,
      1809889913,
      1810775905,
      1811660832,
      1812544693,
      1813427487,
      1814309215,
      1815189875,
      1816069468,
      1816947992,
      1817825448,
      1818701834,
      1819577150,
      1820451396,
      1821324571,
      1822196674,
      1823067705,
      1823937664,
      1824806550,
      1825674363,
      1826541101,
      1827406765,
      1828271354,
      1829134868,
      1829997305,
      1830858666,
      1831718950,
      1832578156,
      1833436285,
      1834293334,
      1835149305,
      1836004196,
      1836858007,
      1837710737,
      1838562387,
      1839412954,
      1840262440,
      1841110843,
      1841958163,
      1842804399,
      1843649552,
      1844493620,
      1845336602,
      1846178499,
      1847019310,
      1847859035,
      1848697672,
      1849535222,
      1850371684,
      1851207058,
      1852041342,
      1852874537,
      1853706642,
      1854537656,
      1855367579,
      1856196411,
      1857024151,
      1857850799,
      1858676353,
      1859500815,
      1860324182,
      1861146455,
      1861967633,
      1862787716,
      1863606703,
      1864424593,
      1865241387,
      1866057083,
      1866871682,
      1867685183,
      1868497584,
      1869308887,
      1870119090,
      1870928193,
      1871736195,
      1872543096,
      1873348896,
      1874153593,
      1874957188,
      1875759680,
      1876561068,
      1877361353,
      1878160533,
      1878958608,
      1879755578,
      1880551443,
      1881346200,
      1882139852,
      1882932395,
      1883723832,
      1884514160,
      1885303379,
      1886091490,
      1886878490,
      1887664381,
      1888449162,
      1889232831,
      1890015389,
      1890796835,
      1891577169,
      1892356390,
      1893134498,
      1893911493,
      1894687373,
      1895462138,
      1896235789,
      1897008324,
      1897779743,
      1898550045,
      1899319231,
      1900087299,
      1900854250,
      1901620082,
      1902384796,
      1903148391,
      1903910866,
      1904672221,
      1905432455,
      1906191569,
      1906949561,
      1907706431,
      1908462180,
      1909216805,
      1909970307,
      1910722686,
      1911473941,
      1912224071,
      1912973077,
      1913720956,
      1914467711,
      1915213339,
      1915957840,
      1916701214,
      1917443461,
      1918184579,
      1918924570,
      1919663431,
      1920401163,
      1921137766,
      1921873238,
      1922607579,
      1923340790,
      1924072869,
      1924803816,
      1925533631,
      1926262314,
      1926989863,
      1927716278,
      1928441559,
      1929165706,
      1929888719,
      1930610595,
      1931331336,
      1932050941,
      1932769410,
      1933486741,
      1934202935,
      1934917991,
      1935631909,
      1936344688,
      1937056328,
      1937766828,
      1938476189,
      1939184409,
      1939891489,
      1940597427,
      1941302224,
      1942005878,
      1942708390,
      1943409760,
      1944109986,
      1944809068,
      1945507007,
      1946203800,
      1946899449,
      1947593953,
      1948287311,
      1948979523,
      1949670588,
      1950360506,
      1951049277,
      1951736901,
      1952423376,
      1953108702,
      1953792880,
      1954475908,
      1955157786,
      1955838514,
      1956518092,
      1957196519,
      1957873794,
      1958549918,
      1959224889,
      1959898708,
      1960571374,
      1961242886,
      1961913245,
      1962582450,
      1963250500,
      1963917395,
      1964583135,
      1965247719,
      1965911147,
      1966573418,
      1967234533,
      1967894491,
      1968553290,
      1969210932,
      1969867415,
      1970522740,
      1971176905,
      1971829910,
      1972481756,
      1973132441,
      1973781966,
      1974430329,
      1975077531,
      1975723571,
      1976368449,
      1977012164,
      1977654716,
      1978296105,
      1978936329,
      1979575390,
      1980213286,
      1980850018,
      1981485584,
      1982119984,
      1982753218,
      1983385286,
      1984016187,
      1984645921,
      1985274488,
      1985901886,
      1986528117,
      1987153178,
      1987777071,
      1988399795,
      1989021348,
      1989641732,
      1990260945,
      1990878987,
      1991495858,
      1992111558,
      1992726085,
      1993339441,
      1993951623,
      1994562633,
      1995172470,
      1995781132,
      1996388621,
      1996994935,
      1997600075,
      1998204039,
      1998806828,
      1999408441,
      2000008877,
      2000608137,
      2001206221,
      2001803127,
      2002398855,
      2002993406,
      2003586778,
      2004178971,
      2004769986,
      2005359821,
      2005948476,
      2006535952,
      2007122247,
      2007707361,
      2008291294,
      2008874046,
      2009455616,
      2010036004,
      2010615209,
      2011193232,
      2011770071,
      2012345727,
      2012920199,
      2013493487,
      2014065591,
      2014636510,
      2015206243,
      2015774791,
      2016342154,
      2016908330,
      2017473319,
      2018037122,
      2018599738,
      2019161166,
      2019721406,
      2020280458,
      2020838322,
      2021394997,
      2021950482,
      2022504779,
      2023057885,
      2023609802,
      2024160527,
      2024710063,
      2025258407,
      2025805559,
      2026351520,
      2026896289,
      2027439866,
      2027982250,
      2028523440,
      2029063438,
      2029602242,
      2030139852,
      2030676267,
      2031211488,
      2031745514,
      2032278345,
      2032809981,
      2033340420,
      2033869663,
      2034397710,
      2034924560,
      2035450213,
      2035974669,
      2036497927,
      2037019987,
      2037540848,
      2038060511,
      2038578975,
      2039096240,
      2039612305,
      2040127170,
      2040640835,
      2041153300,
      2041664564,
      2042174627,
      2042683488,
      2043191148,
      2043697606,
      2044202862,
      2044706915,
      2045209765,
      2045711412,
      2046211856,
      2046711096,
      2047209132,
      2047705963,
      2048201590,
      2048696012,
      2049189229,
      2049681241,
      2050172046,
      2050661646,
      2051150039,
      2051637226,
      2052123205,
      2052607978,
      2053091543,
      2053573900,
      2054055049,
      2054534990,
      2055013722,
      2055491245,
      2055967559,
      2056442663,
      2056916558,
      2057389243,
      2057860717,
      2058330981,
      2058800034,
      2059267876,
      2059734506,
      2060199925,
      2060664132,
      2061127127,
      2061588909,
      2062049478,
      2062508834,
      2062966977,
      2063423906,
      2063879622,
      2064334123,
      2064787410,
      2065239482,
      2065690339,
      2066139982,
      2066588408,
      2067035619,
      2067481614,
      2067926393,
      2068369955,
      2068812301,
      2069253429,
      2069693340,
      2070132034,
      2070569510,
      2071005767,
      2071440807,
      2071874627,
      2072307229,
      2072738612,
      2073168776,
      2073597720,
      2074025444,
      2074451948,
      2074877232,
      2075301295,
      2075724137,
      2076145758,
      2076566158,
      2076985336,
      2077403293,
      2077820027,
      2078235539,
      2078649828,
      2079062895,
      2079474738,
      2079885359,
      2080294755,
      2080702928,
      2081109877,
      2081515602,
      2081920102,
      2082323377,
      2082725428,
      2083126253,
      2083525853,
      2083924227,
      2084321375,
      2084717297,
      2085111992,
      2085505461,
      2085897703,
      2086288718,
      2086678506,
      2087067066,
      2087454399,
      2087840503,
      2088225379,
      2088609027,
      2088991446,
      2089372636,
      2089752597,
      2090131329,
      2090508831,
      2090885104,
      2091260146,
      2091633958,
      2092006540,
      2092377891,
      2092748011,
      2093116900,
      2093484557,
      2093850983,
      2094216178,
      2094580140,
      2094942870,
      2095304368,
      2095664633,
      2096023666,
      2096381465,
      2096738031,
      2097093364,
      2097447462,
      2097800328,
      2098151959,
      2098502355,
      2098851517,
      2099199445,
      2099546137,
      2099891595,
      2100235817,
      2100578804,
      2100920555,
      2101261070,
      2101600349,
      2101938391,
      2102275197,
      2102610767,
      2102945099,
      2103278194,
      2103610052,
      2103940673,
      2104270056,
      2104598201,
      2104925108,
      2105250776,
      2105575206,
      2105898398,
      2106220350,
      2106541064,
      2106860538,
      2107178773,
      2107495769,
      2107811524,
      2108126040,
      2108439315,
      2108751350,
      2109062145,
      2109371699,
      2109680012,
      2109987084,
      2110292914,
      2110597504,
      2110900851,
      2111202957,
      2111503821,
      2111803443,
      2112101822,
      2112398959,
      2112694853,
      2112989505,
      2113282913,
      2113575078,
      2113866000,
      2114155678,
      2114444113,
      2114731304,
      2115017250,
      2115301953,
      2115585411,
      2115867624,
      2116148593,
      2116428317,
      2116706796,
      2116984030,
      2117260018,
      2117534761,
      2117808258,
      2118080509,
      2118351514,
      2118621274,
      2118889786,
      2119157053,
      2119423072,
      2119687845,
      2119951371,
      2120213650,
      2120474681,
      2120734465,
      2120993002,
      2121250290,
      2121506331,
      2121761124,
      2122014669,
      2122266965,
      2122518013,
      2122767812,
      2123016363,
      2123263664,
      2123509717,
      2123754520,
      2123998074,
      2124240379,
      2124481433,
      2124721239,
      2124959794,
      2125197099,
      2125433154,
      2125667958,
      2125901512,
      2126133816,
      2126364868,
      2126594670,
      2126823221,
      2127050521,
      2127276569,
      2127501366,
      2127724911,
      2127947205,
      2128168247,
      2128388037,
      2128606574,
      2128823860,
      2129039893,
      2129254674,
      2129468203,
      2129680478,
      2129891501,
      2130101271,
      2130309787,
      2130517051,
      2130723061,
      2130927817,
      2131131321,
      2131333570,
      2131534566,
      2131734307,
      2131932795,
      2132130028,
      2132326008,
      2132520732,
      2132714203,
      2132906418,
      2133097379,
      2133287086,
      2133475537,
      2133662733,
      2133848674,
      2134033359,
      2134216790,
      2134398964,
      2134579883,
      2134759547,
      2134937954,
      2135115106,
      2135291001,
      2135465641,
      2135639024,
      2135811151,
      2135982021,
      2136151635,
      2136319993,
      2136487093,
      2136652937,
      2136817524,
      2136980853,
      2137142926,
      2137303741,
      2137463299,
      2137621600,
      2137778643,
      2137934428,
      2138088956,
      2138242226,
      2138394238,
      2138544992,
      2138694489,
      2138842727,
      2138989706,
      2139135428,
      2139279891,
      2139423095,
      2139565041,
      2139705729,
      2139845157,
      2139983327,
      2140120238,
      2140255890,
      2140390283,
      2140523417,
      2140655291,
      2140785906,
      2140915262,
      2141043359,
      2141170196,
      2141295773,
      2141420091,
      2141543148,
      2141664947,
      2141785485,
      2141904763,
      2142022781,
      2142139539,
      2142255037,
      2142369275,
      2142482252,
      2142593969,
      2142704426,
      2142813622,
      2142921558,
      2143028233,
      2143133647,
      2143237800,
      2143340693,
      2143442325,
      2143542696,
      2143641805,
      2143739654,
      2143836242,
      2143931569,
      2144025634,
      2144118438,
      2144209981,
      2144300262,
      2144389282,
      2144477040,
      2144563537,
      2144648773,
      2144732746,
      2144815458,
      2144896908,
      2144977097,
      2145056023,
      2145133688,
      2145210091,
      2145285232,
      2145359111,
      2145431727,
      2145503082,
      2145573174,
      2145642005,
      2145709573,
      2145775879,
      2145840922,
      2145904703,
      2145967222,
      2146028478,
      2146088472,
      2146147204,
      2146204673,
      2146260879,
      2146315823,
      2146369504,
      2146421922,
      2146473078,
      2146522971,
      2146571602,
      2146618969,
      2146665074,
      2146709916,
      2146753495,
      2146795811,
      2146836865,
      2146876655,
      2146915182,
      2146952447,
      2146988448,
      2147023187,
      2147056662,
      2147088874,
      2147119824,
      2147149510,
      2147177933,
      2147205093,
      2147230990,
      2147255623,
      2147278994,
      2147301101,
      2147321945,
      2147341526,
      2147359843,
      2147376898,
      2147392689,
      2147407217,
      2147420481,
      2147432483,
      2147443221,
      2147452695,
      2147460907,
      2147467855,
      2147473540,
      2147477962,
      2147481120,
      2147483015,
      2147483647
};
